package com.xkcoding.orm.mybatis.plus.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.GlobalThreadPool;
import com.baomidou.mybatisplus.extension.api.R;
import com.xkcoding.orm.mybatis.plus.entity.User;
import com.xkcoding.orm.mybatis.plus.enums.LogicalErrorEnum;
import com.xkcoding.orm.mybatis.plus.service.UserService;
import com.xkcoding.orm.mybatis.plus.vo.LogicalError;
import com.xkcoding.orm.mybatis.plus.vo.UserVo;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

/**
 * TODO
 *
 * @Author lingNan
 * @Date 2022/7/22 16:08
 **/
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping("1")
    public R save(UserVo userVo) {
        userService.save(BeanUtil.copyProperties(userVo, User.class));
        return R.ok("ok");
    }

    @PostMapping("2")
    public R saveP(@RequestBody UserVo userVo) {
        userService.save(BeanUtil.copyProperties(userVo, User.class));
        return R.ok("ok");
    }

    @GetMapping("3/{id}")
    public R<UserVo> query1(@PathVariable("id") Long id) {
        User byId = userService.getById(id);
        return R.ok(Convert.convert(UserVo.class, byId));
    }

    @GetMapping("4/{id}")
    public R<UserVo> query2(@PathVariable("id") Long id){
        User byId = userService.getById(id);
        UserVo vo = Convert.convert(UserVo.class, byId);
        LogicalError logicalError = new LogicalError();
        logicalError.setInvalid(1);
        logicalError.setValueLevel1(LogicalErrorEnum.LogicalErrorEnum_LEVEL1.DEAL);
        HashMap<LogicalErrorEnum.LogicalErrorEnum_LEVEL2, Integer> map = new HashMap<>();
        map.put(LogicalErrorEnum.LogicalErrorEnum_LEVEL2.DOUBLE,2);
        map.put(LogicalErrorEnum.LogicalErrorEnum_LEVEL2.BLANK,1);
        map.put(LogicalErrorEnum.LogicalErrorEnum_LEVEL2.INTEGER,3);
        logicalError.setValueLevel2(map);
        vo.setLogicalError(logicalError);

        return R.ok(vo);
    }

    @PostMapping("5")
    public R saveP1(@RequestBody UserVo userVo) {
        System.out.println(userVo);
        return R.ok("ok");
    }

    @GetMapping("6")
    public R test_tr(){
        userService.trans();
        GlobalThreadPool.execute(() ->{
            userService.trans();
        });
        return R.ok("ok");
    }
}
